package com.jk.testsql.aop;

import com.jk.testsql.constant.DataSourceTypeEnum;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Aspect
@Order(1) //值越小，越优先执行 要优于事务的执行,在启动类中加上了@EnableTransactionManagement
@Component
public class DataSourceAop {
    /**
     * 写数据方法切面，用于切换到主数据库
     */
    @Before("@annotation(com.jk.testsql.annatation.MasterDB)")
    public void masterData() {
        DataSourceContextHolder.setDbContextLocal(DataSourceTypeEnum.MASTER);
    }
    /**
     * 读数据方法切面，用于切换到从数据库
     */
    @Before("@annotation(com.jk.testsql.annatation.SlaveDB)")
    public void slaveData() {
        DataSourceContextHolder.setDbContextLocal(DataSourceTypeEnum.SLAVE);
    }
}
